home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Monster Media 1996 #15
/
Monster Media Number 15 (Monster Media)(July 1996).ISO
/
pcboard
/
pbs_v15.zip
/
PBSTRING.DOC
< prev
next >
Wrap
Text File
|
1996-05-18
|
86KB
|
1,757 lines
PBstring 1.5 - COPYRIGHT 1995,1996 - TRACY L. BAKER - STARPORT VALHALLA BBS
PBconfig 1.3 - COPYRIGHT 1995,1996 - TRACY L. BAKER
PBreplace 1.3 - COPYRIGHT 1995,1996 - TRACY L. BAKER
}}} SPV is an *OFFICIAL* WWIV Support Site {{{
*** All the legal junk is at the end of this file, it must be read! ***
>>> A CEREBRUM RELEASE <<<
[[[ THIS PROGRAM MODIFIES YOUR SOURCE -- MAKE BACKUPS! ]]]
<<< IF YOU ARE USING A 80286 COMPUTER, THIS PROGRAM WILL NOT WORK! >>>
<<< CONTACT PAPA BEAR (1@11579.WWIVNET) FOR A CUSTOM VERSION >>>
STARTING WITH VERSION 1.4ß3, RUN SETUP.EXE THE FIRST TIME YOU USE THIS
PROGRAM!
{ SECTION 0.0 }
: TABLE OF CONTENTS :
Section 1:
1.0 -------------- Introduction
1.1 -------------- Requirements
1.1.1 ------------ Hardware
1.1.2 ------------ Software
1.1.2.1 ---------- Software notes
1.1.3 ------------ Software that would be nice to have...
1.2 -------------- Installation
1.3 -------------- Features (or: bragging rights)
1.4 -------------- Escape codes, string files, and string editors
1.5 -------------- IMPORTANT NOTES ABOUT UNREGISTERED COPIES!
1.6 -------------- Notes about backups these programs make
1.7 -------------- Testing procedures, DISCLAIMERS, and more!
1.8 -------------- About the way data is entered.
Section 2:
2.0 -------------- Command line switches for PBstring
2.1 -------------- A word about those status lights
2.2 -------------- Keys you can play with during processing
2.3 -------------- Log file information
2.4 -------------- Debug information
2.5 -------------- Exit codes (error levels)
Section 3:
3.0 -------------- Notes about comments, variable declarations,
preprocessor directives, and multiline printf()'s
3.1 -------------- Comments
3.2 -------------- Variable declarations
3.3 -------------- Preprocessor directives
3.4 -------------- Multiline printf() type lines
Section 4:
4.0 -------------- Of INC's and EXC's (and the √ explained, too!)
4.1 -------------- Inclusion file
4.2 -------------- Exclusion file(s)
4.2.0 ------------ Date checking file (PBSTRING.DTE)
4.2.1 ------------ File exclusion file (PBS-FILE.EXC)
4.2.2 ------------ Function exclusion file (PBS-FUNC.EXC)
4.2.3 ------------ Partial string exclusion file (PBS-CHAR.EXC)
4.2.4 ------------ Complete string exclusion file (PBS-STRG.EXC)
4.2.5 ------------ "STR_MOD" emulation
Section 5:
5.0 -------------- How to change WWIV source code to accept new
STR files
Section 6:
6.0 -------------- PBreplace (PBREPL.EXE) documentation
6.1 -------------- Command line switches
6.2 -------------- Run time options (the selection screen)
6.3 -------------- More information
Section 7:
7.0 -------------- PBconfig (PBCONFIG.EXE) documentation
7.1 -------------- Command line switches
7.2 -------------- An important note about PBSTRING.INI
Section 8:
8.0 -------------- Legal junque (You _should_ read this!)
8.1 -------------- Copyright notice
8.2 -------------- Warranty
8.3 -------------- License Agreement
8.4 -------------- Registration
Section 9:
9.0 -------------- The Hall of Honor - those who have registered
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 1.0 }
: INTRODUCTION :
Quite a long time ago, a great WWIV SysOp called Captain EJ (Eric Joy) and I
wrote a program that would automatically remove the literal strings from the
WWIV *.C source files and place them into an external *.STR file. It did
this as well as replacing the line in the *.C file with the appropriate
get_stringx(); function call. This program is called STR_MOD and its last
version was v5.15b which was released on 1/20/94.
It was, and still is, a great saver of DGROUP.
However, it does have some bugs, and it is limited. Unfortunately, due to a
accident, the source to STR_MOD was lost shortly after v5.15b was released.
Now I have decided to re-create, and massively improved, STR_MOD into this
program, PBstring.
PBstring will do everything STR_MOD did and more, much more. It'll properly
handle replaceable parameters, C escape codes, and other things STR_MOD
didn't process. All of this, with MUCH more flexibility. This program is
faster, too.
So what does this do? It takes literal text, that text in C source code that
lies between a set of double quotes, "like this", and removes it to an
external data file. That is its whole job. Keep in mind that while this
SOUNDS easy, it is not -- not even if you do it by hand (and I ought to know
<G>).
Of course, your program should be able to read the data file (WWIV does a
good job of this) to be able to "re-insert" the text back into the program
during run-time.
This extracted text cuts WAAAAY down on DGROUP, and make it easier to modify
the text strings (using a string editor such a WWIV Software Services' ESM
[External String Manager]) without having to recompile the code. This is
especially great for this little cosmetic changes!
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 1.1 }
: REQUIREMENTS :
PBSTRING.EXE, PBCONFIG.EXE, and PBREPL.EXE *MUST* all physically exist
together in the directory that you're going to be using the program(s).
Any machine that is capable of running WWIV, especially a multinodal WWIV,
should be able to run this program without any problems. However, lets cover
the hardware and software that is needed anyway.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 1.1.1 }
: HARDWARE NEEDED TO RUN THIS PROGRAM :
You need to be running at LEAST a machine with an 80386 processor and a VGA
video adapter card. If you are operating with "less" than this, let me know
and I'll make you a custom copy of PBstring (and the associated programs).
For memory requirements, you need at least 160k free of conventional memory.
To run the PBconfig companion program by itself, you'll need 100k of free
memory. If you run the PBconfig program via the PBstring program (IE: You use
the /C or /SE switches -or- PBconfig executes automatically in the case of a
non-existent or outdated INI file) you'll need at LEAST 260k free of
conventional memory.
PBreplace needs 130k to operate in.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 1.1.2 }
: SOFTWARE NEEDED TO RUN THIS PROGRAM :
DOS, or any program capable of creating, or emulating, a DOS "window" or
"session". MSDOS, PCDOS, DRDOS [NovellDOS], OS/2, Windows 95, Windows 3.1x,
DESQview, and possibly others, are qualifying candidates.
This program was written primarily with WWIV in mind. The registration code
checking is dependent on information from WWIV. As a result, it has been
tested, and works best, with WWIV source code. However, this program will
work fine with any program that supports external string files of the type
used by WWIV.
C source code is also required. (duh!)
Again, since this program was written with WWIV in mind, the registration
code key decryption is based on certain information available only from
systems that are actually running WWIV. If you wish to use this program and
you do not run a WWIV, simply let me know as much, and arrangements can, and
will, be made to suit your needs!
Borland C/C++ 3.1 or newer. Borland's Turbo C/C++ 3.0 or newer. One of these
is kind of necessary if you want to compile WWIV's source code. Cost varies
greatly -- Turbo C is usually the cheaper of the two, however. Any version
older may not compile WWIV's source code correctly any longer. (Borland
C/C++ 2.0, if you can find it, may still work fine.)
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 1.1.2.1 }
: SPECIAL SOFTWARE CONSIDERATIONS :
Again, at least 110k in DOS (or a DOS window, or session) is required.
PBstring also opens, and simultaneously maintains, MANY files. At any given
time during the normal operation of this program, PBstring or PBreplace have
as many 20 files open. I chose to do things this way because, quite simply,
it makes the program *much* faster! This is in conjunction that DOS needs
for its operation during PBstring's execution. As a result, the FILES setting
(normally set in the CONFIG.SYS file -- but can be found in the AUTOEXEC.BAT
file if using QEMM) must be set to at least 30 to be safe. You'll know if
you have too few specified if you get errors in PBstring indicating a certain
file couldn't be opened.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 1.1.3 }
: OTHER SOFTWARE PROGRAMS THAT ARE NICE TO HAVE :
Although the MINIESM.EXE that comes with WWIV can edit the string files
created by PBstring, there are better ones out there. External String
Manager (ESM) can be obtained from WWIV Software Services (WSS). The cost of
this program is $5.
External String Editor (ESE) (from French Mod Division) will also work *IF*
you do not allow PBstring to create, or convert to, 255 character long string
files. This can be done by using the /1 command line switch. This editor is
free. It has also been reported to me that FMD's WWIVsys, with the built in
string editor, will properly handle 255 character length strings. WWIVsys'
registration fee is $30.
STRPOP, also from WSS, is a great little utility that allows you to view and
edit the strings associated with the get_string() / get_stringx() statements
while you're working on your source. First, you'd load STRPOP (its a TSR),
then you go and edit your source file. When you're in your editor, simply
place your cursor on the line you want to see, and press ALT-V. Supports
multiple STR files, too. Registration is $15.
Qedit v3.0+, from SemWare, is my all-time favorite editor. Registration
is $59.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 1.2 }
: HOW TO INSTALL THIS PROGRAM :
Simple, just place all of the PBstring files in your source directory. :)
The files you're most interested in are: PBSTRING.EXE, PBREPL.EXE,
PBCONFIG.EXE, PBS-CHAR.EXC, PBS-FILE.EXC, PBS-FUNC.EXC, PBS-FILE.EXC,
PBSTRING.DTE, and the PBSTRING.REG files.
Then, run the SETUP.EXE that now comes with the archive. READ ALL SCREENS
and do what they are telling you to do. This is the *best* way to get up and
running for first-time installations.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 1.3 }
: BRAGGING ABOUT MY PROGRAM TIME <G> :
Well, first off, this program really DOES save a lot more DGROUP than
STR_MOD. On virgin source, this program saves an extra 6k of DGROUP over
STR_MOD. On my massively modded source code, after STR_MOD had its shot on
the source, PBstring saved an additional 10k!
Additionally, I've been able to make PBstring much faster than STR_MOD. I
can process my entire source code in a hair over 2 minutes with PBstring.
With STR_MOD, it was over 15 minutes.
Safety. This is the name of the game when dealing with your C files -- you,
and I, don't want all your hard work to go to waste. I've worked VERY hard to
make certain that PBstring does not screw up your C files. They're backed up
*BEFORE* processing. The processing that takes place for each line must pass
through 4 tests that you determine (via exclusion files), and up to 10 more
built into the program. Only when a line of code has passed through all of
these safety tests can it be processed for get_stringx(x,y) replacement. The
string files themselves are copied FROM the GFILES directory so they can be
processed while the BBS is running, if you want to, without interference to
the BBS. If the string file already exists in the string directory, it, too,
is backed-up into the proper PBSORGxx subdirectory off your source directory.
Information. The PBSTRING.LOG file reports everything that is going on.
Additionally, my standard DEBUG processing is here, too. You'll know at all
times what in the heck is going on with your source. See section 2.4 for
more information on DEBUG.XXX Alternatively, use the /DEBUG switch to
activate the DEBUG mode.
My program, unlike STR_MOD, properly creates 255 character-length string
files when a new one is made. STR_MOD made 100 character files which could
cause problems for extra long strings. Additionally, PBstring will take any
of those old 100 or 161 character length files and convert them to the newer
255 character format.
Please review PBSTRING.HIS for a comprehensive listing of additions, bug
fixes, and/or enhancements made to the various PBstring programs.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 1.4 }
: OF ESCAPE CODES, STRING FILES, AND EXTERNAL STRING EDITORS :
This program takes most of the standard C escape code sequences that most
external string managers CANNOT read and translates them into single
character equivalents that CAN be processed by an ESM.
An important note here. While a carriage return appears as a \r in the
source code, in the string file, it appears as an ASCII 13, looking like a
musical note when viewing it with the editor (WSS's ESM), and a capital
reverse M when editing it in ESM. The popular \n appears as a ASCII 10,
looking like a box with a circle in it when viewed, and a capital reverse J
when editing.
Other escape codes that are converted are: \a, \b, \f, \t, and \v. Please be
aware that each has their own characters when viewed, and when edited in ESM.
PBstring, as of version 1.4, fully supports ASCII codes that follow C's
escape code character. In other words, codes like \003 and \007 are properly
converted to their literal ASCII codes (a heart for \003 and a dot for \007).
This will work for just about any format (3-digits, max) that you use. \003,
\03, \3 will all translate into a heart.
HOWEVER, you should write code using all three digits, like \003 (heart), \032
(carriage return), \171 (a ½ symbol). Why? Well in WWIV, the \003 is
sometimes used to indicated the start of a color code. The heart that is
generated tells WWIV to convert the NEXT character (usually a number) into
the appropriate color. This number *must* immediately follow the \003, like
\0035 for the color green. If you use \35 or \035 instead, PBstring will NOT
know that you want the heart with a 5 following. It will, instead translate
this into an ASCII 35 in each case.
NOTE: String files created with this program are 100% compatible with the
External String Manager (ESM) written by Tolkien and sold by WWIV Software
Services. It is entirely possible that the External String Editor (ESE)
written by the French Mod Division (or the WWSYS /ESE) will *NOT* work. I've
had problems in the past with getting ESE to work properly with the "new"
style 255-character string files. While I've had problems in the past, I
also have reports from people experiencing no problems whatsoever. Using the
/1 switch should ensure compatibility with ESE, although it will also limit
the extraction of certain strings.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 1.5 }
: WHY YOU SHOULD REGISTER THIS FINE PROGRAM :
This program is cheap. $20 is not a lot of money when you consider the
amount of time it'll save you. If you were to go through and remove all the
valid strings from your source by hand, you'd not only be there a long time,
but you'd inevitably miss some. Additionally, you'll have to do it again.
By registering this program, you give me ample reason to continue development
of this program, and start new ones. You also give me something concrete to
show my wife. :)
If left unregistered, You'll have to wait through a 60 second pause before
and after the program executes.
So please register!
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 1.6 }
: THOSE EVER-IMPORTANT BACKUPS! :
PBstring and PBreplace both automatically backup your source code and, if
applicable, your string files too.
Starting with version 1.2 of PBstring (and 1.0 of PBreplace) the WAY it does
this differs from previous versions. Previously PBstring simply copied the C
files to a file that had the same filename, and an ORG extension. (Early
ßetas of PBreplace did the same, but with a RPL extension.) Additionally,
PBstring would copy a pre-existing STR file over to a backup with a rather
cryptic filename and a BAK extension. This is no more.
Now PBstring and PBreplace will create a new subdirectory off your source
directory and place the original files in them before any processing takes
place on them. The directories are incremental, meaning that for each time
you run PBstring or PBreplace, a new backup directory is created so you can
keep generations of backups.
For PBstring, the directory names are PBSORG00 to PBSORG99. For PBreplace
they're PBRRPL00 to PBRRPL99. As each new directory is created, the counter
is increased by one -- but ONLY if the directory number before any that exist
are themselves present.
For example, if you're running PBstring for the 5th time, and you've not
deleted any previous directories, PBSORG04 will be created, so you'll end up
with the following dirs off your source dir:
PBSORG00
PBSORG01
PBSORG02
PBSORG03
PBSORG04
If, however, you've previously removed the old directories, then PBSORG00
would be used (again). If you've left PBSORG00, PBSORG01, PBSORG03 (skipping
02), then the next to be used would be PBSORG02 -- it fills in any dead spots.
If you reach PBSORG99, and you run PBstring again, the program will halt with
an error due to an inability to create a backup directory. You can always
find the newest directory by looking at the directory's date stamp.
PBreplace works in the same manner for the PBRRPL?? directories.
PBstring will backup a STR file that it finds in the source directory *OR* if
it finds one in the string directory (as specified in the configuration
editor) into the backup directory. The C files are backup'ed into this
directory, with an extension of ORG.
PBreplace backs-up the C files into its directory with extensions of RPL.
Since it makes no changes the STR files, no backups of those are necessary.
Keep in mind that while PBstring and PBreplace process all the C files that
you tell it, it will only keep backups of those files that it actually
changes. Those files that do not require any changes are kept as is.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 1.7 }
: WHAT I TESTED THIS ON, AND A DISCLAIMER :
I tested this on WWIV's virgin source. I made certain that (1) PBstring
would properly convert the C files, (2) that those C files would properly
compile, and (3) that the resultant BBS.EXE would indeed execute. I also
made certain that the files I let it process were the same as those that
Wayne Bell included get_string(); lines in.
I tested this on my *heavily* modified source. I made certain that I could
compile and use my source code.
I have also tested this using many examples of C source code obtained from
many different people (usually when they discover a portion of the program
that doesn't work). In this manner, PBstring becomes more and more
compatible with a much wider variety of programming styles.
PBreplace was also tested on my source. I couldn't recompile, however, due
to lack of DGROUP (<G>).
Additionally, I have ßeta testers that have tested this under OS/2, Windows
3.11, Windows 95, DESQview, PC-DOS 7.0, MS-DOS 6.22. All of this on various
machines and even LAN equipped systems.
Now a word of caution. I cannot possibly know all the different ways that
people program. It may well be that this program chokes on something. If it
does, it is only because I've not seen that particular situation before,
whatever that may be. In other words, I can only guarantee that it worked on
my source, and the virgin source, on the computer I'm using.
If you do find it choking, please E-Mail me the PBSTRING.LOG (if there's
anything in it) and, and this is important, the C file it choked on. I'll
fix it from there. E-Mail them to 1@11579.wwivnet.
While I have included what I feel are complete exclusion files (these are the
files that keep PBstring from processing things it shouldn't), I may not have
things in them that you need to successfully run this program. Make certain
the *carefully* check over things, and update your exclusion files as
necessary!
REMEMBER, I wrote this program the best I know how. It works well, and it
has MANY safeguards built in to protect your source code. However, I am not
responsible for any damage or loss of your source code because of this
program. You chose to use it, so you're responsible.
You may find that after PBstring works its magic, and the source compiles
fine, that your program (BBS) doesn't work correctly. This is not caused by
a problem with PBstring. If anything, it is a case of PBstring working too
well.
You see, a string may turn out to be a perfectly legitimate candidate for
removal. However, once removed, your program (BBS) will not handle it
properly. If you find this to be the case, then you can use the exclusion
files (see Sections 4.2 - 4.2.5) to tell PBstring to skip over that line and
avoid the problem in the future.
Keep in mind that you can either replace the entire C file to its original
state by copying over it with its ORG companion. Or, alternatively, you can
simply replace that string with the one in the ORG file using a simple
copy/paste sequence in your text editor.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 1.8 }
: ABOUT THAT FANCY NEW ENTRY SCHEME :
Beginning with version 1.4 of PBstring, and 1.2 of both PBconfig and
PBreplace, I've introduced a new way of entering data. It will now allow you
to enter data instead of having to enter the new data in its entirety.
The keys that are active are: Backspace, Delete, Insert, left and right arrow
keys, Home, Escape, and End.
The arrows, Home, End, Backspace, and Delete all work in the fashion that
you're used to.
The Insert key toggles insert mode on or off (overstrike).
The Escape key clears the data from the field entirely, allowing you to enter
new data. If you press Escape, then Enter, the data field will be erased.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 2.0 }
: COMMAND LINE SWITCHES :
Here are the command lines that are available to this program:
──────────────────────────────────────────────────────────────────────────────
[what to call this switch] {example}
/s{filename} description
description
example, if any
──────────────────────────────────────────────────────────────────────────────
[? Help] {/?}
/? Display the online command line option menu.
──────────────────────────────────────────────────────────────────────────────
[1oo character long strings] {/1}
/1 This causes PBstring to create 100 character long string files
instead of the default 255 character long files. This may be
necessary for some systems for backwards compatibility sake.
──────────────────────────────────────────────────────────────────────────────
[3-triples] {/3}
/3 Normally, PBstring will *not* process strings that have 3 or
more sets of double quotes (") in them. This means that
strings like:
printf("This is a % test.",(TEST>0):"POSITIVE":"NEGATIVE");
will not be processed. However, by including this switch, you
are forcing PBstring to go ahead and process them. In this
case, they are handled identically as other strings. Be
forewarned, however, that this *CAN* and *HAS* caused erratic
behavior once the source is recompiled, and the program
executed. This is not a fault of PBfiles, rather, it is that
of the string handling routines trying to read in all three
extracted strings from the string file properly.
──────────────────────────────────────────────────────────────────────────────
[All files in INC] {/A}
/A This causes the program to run just the same as if no /A switch
of any kind was used. This is the default operating mode.
PBSTRING.INC is the inclusion file used.
──────────────────────────────────────────────────────────────────────────────
/AA Process all the files listed in the inclusion file, ignoring
any date checking.
──────────────────────────────────────────────────────────────────────────────
[All files in other INC] {/AMYFILES.INC}
/A{fn} Similar to the normal /A switch except that the inclusion file
named after the /A will be used instead of PBSTRING.INC
──────────────────────────────────────────────────────────────────────────────
[All files!] {/A!}
/A! Do every C file in the current directory regardless of whether
it is in any inclusion file or exclusion file. Date checking
is *NOT* preformed.
──────────────────────────────────────────────────────────────────────────────
[Build new INC] {/B}
/B Build new INC file from files in current directory, and use the
PBS-FILE.EXC file as the exclusion file to determine what files
not to include. The program will run normally at this time.
The file that will be built is PBSTRING.INC.
──────────────────────────────────────────────────────────────────────────────
[Build other INC] {/BMYFILES.INC}
/B{fn} Same as /B, as above, except build and use {fn} instead of
PBSTRING.INC.
──────────────────────────────────────────────────────────────────────────────
[Build INC, don't run!] {/B!}
/B! Build a new PBSTRING.INC file, as the /B switch, but do *NOT*
run the program afterwards.
──────────────────────────────────────────────────────────────────────────────
[Build other INC, don't run!] {/B!MYFILES.INC}
/B!{fn} Build a new {fn} inclusion file, but do *not* run the program.
──────────────────────────────────────────────────────────────────────────────
[enter Configuration editor] {/C}
/C Enter the PBstring configuration editor. (This is done
automatically as: (1) the program is run the first time, (2) the
INI file is the incorrect length, or (3) the revision date is
incorrect).
──────────────────────────────────────────────────────────────────────────────
[reinitialize Date file] {/D}
/D Make the PBSTRING.DTE reflect the existing dates of the C files
in the current directory. This means that next time PBstring is
run, no processing will take place unless the C file(s) have
been modified. Note that this file is reinitialized after every
processing session.
──────────────────────────────────────────────────────────────────────────────
[DEBUG information] {/DEBUG}
/DEBUG Turns on DEBUG information in the PBSTRING.LOG file. Takes the
place of having to have a DEBUG.XXX file in existence in the
current working directory.
──────────────────────────────────────────────────────────────────────────────
[process single File] {/FLILO.C}
/F{fn[.C]} Process the file specified after the /F. Note that no date
checking will take place. If the file exists in the
PBS-FILE.EXC exclusion file, you will be warned that you have
marked it as an "illegal" file. PBstring will ask for
confirmation that you want to process the file before
continuing. The .C extension is optional.
──────────────────────────────────────────────────────────────────────────────
[toggle Log on/off] {/L}
/L Turn log file entries to PBSTRING.LOG on/off in accordance with
the settings in the INI file.
──────────────────────────────────────────────────────────────────────────────
[toggle Case comparisons] {/NC}
/NC Normally, each string is considered different if the case of the
letters are different. So these two strings would not be the
same:
Test
test
By including this switch, these are made "equal". The
comparisons are taken into consideration when checking for
duplicate entries in the string (*.STR) file you have specified.
Toggled on/off in accordance with the INI settings.
──────────────────────────────────────────────────────────────────────────────
[toggle Heart comparisons) {/NH}
/NH Normally, each string is considered different if the heart (WWIV
color codes) of the letters are different. So these two strings
would not be the same (assuming ^ as a heart, ASCII 3):
^2test
^1test
By including this switch, these are made "equal". The
comparisons are taken into consideration when checking for
duplicate entries in the string (*.STR) file you have specified.
Toggled on/off in accordance with the INI settings.
──────────────────────────────────────────────────────────────────────────────
[use Output File] {/OFMODS2.STR}
/OF{fn} Redirect output to a STR file other than the one specified in
the INI file.
──────────────────────────────────────────────────────────────────────────────
[use Output Number] {/ON3}
/ON{#} Use a different string file number other than the one specified
in the INI file.
──────────────────────────────────────────────────────────────────────────────
[Quiet mode] {/Q}
/Q Turn off/on most screen updating while processing. This makes
the program *MUCH* faster when off! Pressing F while processing
toggle this on/off.
──────────────────────────────────────────────────────────────────────────────
[Quiet mode - Sound] {/QS}
/QS Toggle on/off most sounds (in accordance with INI)
──────────────────────────────────────────────────────────────────────────────
[use String length] {/S4}
/S{#} Use a different limiting length for string processing other than
what has been specified in the INI file. Strings *shorter* than
{#} will not be processed. \r, \t, etc., and %s, %d, etc. are
*NOT* taken into consideration when determining the string
length. So this string would have 16 characters, not 26:
printf("\r\nThis has %d chars.\r\n",i);
──────────────────────────────────────────────────────────────────────────────
[String locator Editor] {/SE}
/SE Enter the editor that allows you to edit the locations of up 14
string files. The program does not execute after using this
switch.
──────────────────────────────────────────────────────────────────────────────
[Work disk] {/WG:}
/W{disk} This causes PBstring to use the {disk} as the place to create
the new C files. A perfect candidate for this is a RAM drive.
PBstring keeps track of the total space left on the work disk.
The total is displayed in green until it drops below 81k (the
size of LISTPLUS.C -- most likely the largest C file you'll
process) when it'll then display in flashing red. If the total
drops below the size of the C file currently being processed,
the program stops processing.
──────────────────────────────────────────────────────────────────────────────
[Yes/no option] {/Y}
/Y This will make PBstring stop on all strings that have passed the
programs testing parameters and ask you if you want to remove it
to the string file. You can press Y or ENTER for yes, N for No,
or A to make it accept all the rest of the strings.
──────────────────────────────────────────────────────────────────────────────
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 2.1 }
: ABOUT THOSE "STATUS LIGHTS" :
In the middle of the screen in PBstring, on line 13 to be precise, are 10
"status lights". These are indicators of what the program is up to at
virtually any given moment. They are:
CO - Currently in, or processing, a comment line or block
PP - Processing a preprocessor directive
VD - Processing a char[][]= type variable declaration -or- a structure block
with predefined literal strings.
CF - Checking a valid string against PBS-FUNC.EXC
CS - Checking a valid string against PBS-STRG.EXC
CC - Checking a valid string against PBS-CHAR.EXC
NP - Current string has no text and/or does not qualify for processing
SS - Searching STR file for a valid place to put removed text
DC - Checking file against PBSTRING.DTE to determine if it needs processed
EC - Checking file against PBS-FILE.EXC to determine if it needs processed
Additionally, a small blinking ∙ will appear next to the status light that is
active. The affected lights are CF, CS, CC, DC, and EC. If the ∙ appears
next to the light, then it means that the appropriate *.EXC is being used.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 2.2 }
: KEYS YOU CAN PLAY WITH DURING PROCESSING IN PBSTRING :
There's is the F key, and then there's all the rest. Pressing any key other
than the F key will cause the program to *abort* after it is finished with
the file it is working on.
Pressing F will toggle the status of the "Quiet mode". Quiet mode, when on,
does not allow for screen updating except to display the filename currently
being processed and how many lines are in that file. When off, it allows all
information to be processed. The program runs MUCH faster with screen up-
dating off (Quiet mode ON). For example: When run a on a 40,235 byte file
it runs in 14 seconds with screen updating taking place, and in 8 seconds in
Quiet mode. Over the course of a complete WWIV source code, these time
savings can be very significant.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 2.3 }
: LOG FILE INFORMATION :
PBstring supports a very robust log file reporting system. PBSTRING.LOG is
the file where almost anything done by the program is reported.
Here is a sample log file:
[PBstring 10ß01 log opened: August 18, 1995 at 22:28.55]
Thanks for registering PBstring 10ß00, Papa Bear! :)
Could not find C:\BOARD\GFILES\TEST.STR.
!!! Creating new STR file.
»»»"Illegal" file checking is in effect.«««
»»»Date checking is in effect.«««
»»»Partial string checking is in effect.«««
»»»Full string checking is in effect.«««
»»»Function checking is in effect.«««
Processing MMENU.C
- passed PBS-FILE.EXC checking.
### MMENU.C has not been modified -- skipping file.
Processing GFILES.C
- passed PBS-FILE.EXC checking.
### GFILES.C has not been modified -- skipping file.
...
Processing LILO.C
- passed PBS-FILE.EXC checking.
- passed PBSTRING.DTE checking.
- Backing up to LILO.ORG
- Checking strings.
+> ADD (1 ): USA
+> ADD (2 ): CAN
+> ADD (3 ): MEX
...
+> ADD (11 ): 1%-6ld %-25.25s %-10.10s %-5.5s %-5.5s %-20.20s %2d\r\n
*> DUPE (11 ): 1%-6ld %-25.25s %-10.10s %-5.5s %-5.5s %-20.20s %2d\r\n
+> ADD (12 ): CID NUM : %s
...
-*- Total NEW strings removed: 42
-*- Total DUPE strings removed: 3
-*- Total strings removed: 45
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
*-* Total NEW strings removed -- all files: 42
*-* Total DUPE strings removed -- all files: 3
*-* Total strings removed -- all files: 45
Re-Building PBSTRING.DTE.
>>> Shutting down PBstring 10ß00 at 22:29.12
Reason: FINISHED PROCESSING
Code: 0
Total time to run: 0 min., 14 secs.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 2.4 }
: DEBUG IN DA MACHINE :
If DEBUG.XXX (a file with anything in it) exists in the current directory,
additional information is printed into the log file. The physical presence
of this file will active MOST all of the PB*.* utilities. Debug works in
PBreplace and PBconfig as well as PBstring.
Starting with version 1.3 (ßeta 5) of PBstring, and 1.1 of both PBreplace and
PBconfig, DEBUG.XXX is no longer necessary. It'll still be used if it is
there. Now you can activate the DEBUG coding by using /DEBUG as a command
line switch for the program you're running.
This additional information make the log file look something like this:
[PBstring 10ß03 log opened: August 25, 1995 at 22:04.59]
DEBUG: Memory left @ start: 518k (FCL) 518k (CL)
Thanks for registering PBstring 10ß03, Papa Bear! :)
/F -- Processing single file (LILO.C)
DEBUG: Current CFG revision date : 803
DEBUG: Registration Code is : 12589647
DEBUG: Log file entries are : ON
DEBUG: Ignoring embedded color codes? : NO
DEBUG: Ignoring upper/lower case? : NO
DEBUG: Minimum string length for proc.: 5
DEBUG: STR file number : 7
DEBUG: STR file name : TEST.STR
DEBUG: Inclusion file name : SINGLE.PBS
DEBUG: STR directory is : C:\WWIV\GFILES\
DEBUG: BBS directory is : C:\WWIV\
DEBUG: ERR: PBstring could not locate TEST.STR!
DEBUG: Commandline: COPY C:\WWIV\GFILES\TEST.STR C:\PBSTRING\TEST.STR > NUL
DEBUG: TEST.STR has a string length of: 255
»»»"Illegal" file checking is in effect.«««
»»»Date checking is in effect.«««
»»»Partial string checking is in effect.«««
»»»Full string checking is in effect.«««
»»»Function checking is in effect.«««
Processing LILO.C
- Backing up to LILO.ORG
DEBUG: ERR: PBstring could not locate LILO.ORG!
- Checking strings.
DEBUG: Comment checking start line: 2
DEBUG: Comment checking end line: 14
+> ADD (1 ): USA
+> ADD (2 ): CAN
+> ADD (3 ): MEX
...
-*- Total NEW strings removed: 0
-*- Total DUPE strings removed: 18
-*- Total strings removed: 18
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
*-* Total NEW strings removed -- all files: 0
*-* Total DUPE strings removed -- all files: 18
*-* Total strings removed -- all files: 18
Re-Building PBSTRING.DTE.
DEBUG: ...Adding ADDRESS.C to PBSTRING.DTE
DEBUG: ...Adding BBSOVL1.C to PBSTRING.DTE
DEBUG: ...Adding BBSUTL.C to PBSTRING.DTE
...
DEBUG: ...Adding XFERTMP.C to PBSTRING.DTE
DEBUG: ...Adding REG.C to PBSTRING.DTE
>>> Shutting down PBstring 10ß03 at 22:05.23
Reason: FINISHED PROCESSING
Code: 0
Total time to run: 0 min., 20 secs.
Total number of source lines processed: 1416
DEBUG: Memory left at end: 517k (FCL) - 517k (CL)
Most of the information that is there is for my benefit should you have any
problems. Of course, you can get a better overall picture (as well as a
*significantly* larger LOG file) about what is going on "underneath" all the
pretty lights.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 2.5 }
: THE ERROR LEVELS (CODES) :
Utilities written by me support exit error codes (great for batch processing).
A listing of all follows for PBstring:
-1 - No error.
00 - No error.
01 - COMSPEC variable not set. Try setting COMSPEC in your AUTOEXEC.BAT file.
02 - Unknown error opening PBSTRING.CFG (it does exist).
03 - Could not find CONFIG.DAT
04 - Unknown error opening CONFIG.DAT.
05 - Unknown error reading CONFIG.DAT.
06 - (unregistered copies) FAILED random keypress.
07 - Could not open PBSTRING.CFG for saving.
08 - Could not build inclusion file.
09 - Could not create date file.
10 - Could not create PBSTRING.REG.
11 - No filename specified with /F switch.
12 - User did not want to process "illegal" file.
13 - Could not process single file.
14 - Could not open source STR file for copying.
15 - Could not open dest. STR file for copying.
16 - Did not want to make new STR file.
17 - Could not create new string file.
18 - Could not open inclusion file for main processing.
19 - Could not open input C file for main processing.
20 - Could not open output C file for main processing.
21 - Could not set up STR file for processing.
22 - Could not open PBS-FILE.EXC for main processing.
23 - Could not open PBSTRING.DTE for main processing.
24 - Could not open PBS-CHAR.EXC for main processing.
25 - Could not open PBS-STRG.EXC for main processing.
26 - Could not open PBS-FUNC.EXC for main processing.
27 - File abnormally closed, no resolution, in pre-processor checking.
28 - File abnormally closed, no resolution, in comment checking.
29 - File abnormally closed, no resolution, in variable declaration checking.
30 - Did not want to convert 100 or 161 char. string file length to 255.
31 - Error copying string file from GFILES directory.
32 - File abnormally closed, no resolution, in multiline quote checking.
33 - Error backing up C file to ORG storage directory.
34 - Error moving STR file back to GFILES directory.
35 - Error moving *.C files back from specified work disk.
36 - Error in displaying screen
37 - Could locate PBCONFIG.EXE and/or PBREPL.EXE in current directory
38 - Too little room on work disk to start. (file > bytes free on work disk)
39 - Couldn't create ORG storage directory (PBSORG00-PBSORG99 all exist).
40 - Couldn't create ORG storage directory (creation error).
41 - Error backing up STR file into ORG storage directory.
42 - Unable to open INI immediately after creation.
43 - Couldn't copy STR file into working directory.
44 - Error opening STR for reading/writing.
45 - Couldn't set up 100>255 temp. conversion file.
46 - (Conversion) Error in setting up file to be converted
Error exit codes generated by PBconfig are all in the 100-199 range, with the
exceptions of -1 and 0:
-1 - No error.
0 - No error.
100 - COMSPEC environment variable not set.
101 - Unable to open PBSTRING.INI for reading.
102 - Unable to write to (save) PBSTRING.INI.
103 - Unknown error opening PBSTRING.REG for writing.
Error exit codes generated by PBreplace are all in the 200-299 range, with
the exceptions of -1 and 0:
-1 - No error.
0 - No error.
200 - PBSTRING.EXE and/or PBCONFIG.EXE do not exist in current directory.
201 - COMSPEC variable not set.
202 - Error building default INC file.
203 - Failure building temporary inclusion file (all files - switch).
204 - No filename specified with /F switch.
205 - Didn't want to process "illegal" file.
206 - Failure building temporary inclusion file (single file - switch).
207 - Failure building temporary inclusion file (all files - internal).
208 - Failure building temporary inclusion file (single file - internal).
209 - Processing aborted.
210 - Could not open inclusion file for processing.
211 - Couldn't create RPL storage directory (creation error).
212 - Could not back up C to RPL
213 - Unresolved comment - reached EOF.
214 - C files left on specified work disk. Error moving them back.
215 - Error displaying screen.
216 - Failed unregistered keypress.
217 - Couldn't find CONFIG.DAT.
218 - Error opening CONFIG.DAT for reading.
219 - Error reading CONFIG.DAT.
220 - Too little room on work disk to start. (file > bytes free on disk)
221 - Couldn't create RPL storage directory (PBSRPL00-PBSRPL99 all exist).
222 - Error checking file for its size.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 3.0 }
: A NOTE ABOUT COMMENTS, VARIABLE DECLARATIONS, & PREPROCESSOR DIRECTIVES :
: AND MULTILINE PRINTF() TYPE LINES, TOO! :
PBstring handles virtually all of these things quite well, including
multiline versions of all.
However, there are a few caveats, as described in the following 3.x sections.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 3.1 }
: COMMENTS :
Both types of comment types (those used in C -- /* */ and C++ -- //) are
properly detected.
Those lines that fall within a multiline comment block are *NOT* processed.
For example:
printf("TEST -- this would be processed!");
/*
printf("This would not");
printf("me neither");
*/
printf("This would be.");
// printf("Not processed!");
printf("This will be processed."); // after code
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 3.2 }
: VARIABLE DECLARATIONS :
The following conditions MUST be true for PBstring to recognize pre-defined
char variable declarations of either single, or multiline varieties:
(1) If [] and ] = (or ]=) appear on the same line
(2) If the char variable declaration (with a trailing space) appears on
the same line with two left brackets ([) *and* two right brackets
(]) *and* a =, but with no ==
(3) If the char declaration appears with a [] and a = on the same line,
with no ==
PBstring will recognize the END of a multiline char variable declaration when
it detects a }; on a line.
Examples of good and bad variable declarations:
*********************************** OK: *********************************
[ These are properly handled, therefore not processed. ]
char [9][10]={"as;ldk",";asdk;l", // char , two [ and two ] and =
"1as;lkd","POIPOIP",
"2as;lkd","POIPOIP",
"3as;lkd","POIPOIP"}; // and the };
char [9][10] = {"as;ldk", // ] = is just as okay as ]=
";asdk;l",
"1as;lkd","POIPOIP",
"2as;lkd","POIPOIP",
"3as;lkd","POIPOIP"};
char [9][10] = { // char , two [ and two ] and =
"as;ldk",";asdk;l",
"1as;lkd","POIPOIP",
"2as;lkd","POIPOIP",
"3as;lkd","POIPOIP"};
char [][10] = // [] and ] = make this ok
{
"as;ldk",";asdk;l",
"1as;lkd","POIPOIP",
"2as;lkd","POIPOIP",
"3as;lkd","POIPOIP"};
char [9][10] = {
"as;ldk",";asdk;l",
"1as;lkd","POIPOIP",
"2as;lkd","POIPOIP",
"3as;lkd","POIPOIP"
}; // }; here still ends it okay
char *exts[] = {"", ".COM", ".EXE", ".BAT", 0};
// notice that this has all the elements to start, which in this case,
// are [] and ] = The ending characters are also here };
arc_testers arc_t[] = { // this, too, isn't processed -- it
{"ZIP", check_for_files_zip}, // it includes the necessary [] and
{"ARC", check_for_files_arc}, // and ] = to start the exclusion, and
{"LZH", check_for_files_lzh}, // the }; to finish it
{"ARJ", check_for_files_arj},
{NULL, NULL},
};
******************************** NOT OK: *******************************
[ These are NOT properly handled by PBstring ]
[ These can also cause unresolved Var. Decl. errors! ]
char [9][10] // no = on this line
={"as;ldk",";asdk;l",
"1as;lkd","POIPOIP",
"2as;lkd","POIPOIP",
"3as;lkd","POIPOIP"};
char [9][10] ={"as;ldk",";asdk;l", // ] = (TWO spaces) doesn't work
"1as;lkd","POIPOIP",
"2as;lkd","POIPOIP",
"3as;lkd","POIPOIP" };
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 3.3 }
: PREPROCESSOR DIRECTIVES :
All of (Borland and Turbo) C's preprocessor directives are properly handled.
The ones that support anything that may have double quotes are #define and
#include.
PBstring is smart enough to know the difference between a "true" preprocessor
directive, and one that just happens to be in a line of text. In other
words, this would NOT be processed:
#include "test.h"
This WOULD be processed:
printf("Test - #include is a pre-proc. command");
Multiline directives are also handled correctly.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 3.4 }
: MULTILINE PRINTF() TYPE LINES :
PBstring properly handles multiline printf() type statements (as of version
1.1). There are some things you should be aware of, however, so you can be
certain that the maximum number of strings are removed:
If a comma (,), a semi-colon (;), open brace ({), or closed parenthesis ())
is detected AFTER a pair of double quotes ("), the line WILL be processed.
NOTE: This is only true for complete pairs of double quotes.
NOTE: For WWIV users, npr(), pl(), etc. are treated like printf()
*********************************** OK: *********************************
[ These lines WILL be processed by PBstring ]
sprintf(test,"This is a %s", // notice the , before the 1st " and
variable); // after the second (of the pair) "
if (strcat(test,"TEST STRING")) // again the , before the 1st "
printf("This is a test string."); // this has the ; after the paired "
print("This is another %s", // this has the , after the paired "
test_variable);
******************************** NOT OK: *******************************
[ These lines WILL NOT be processed by PBstring ]
printf("This is line one" // these lines are skipped over by
"and line two" // by PBstring -- they constitute a
"and line three"); // multiline printf()
printf("This is a test of %s" // This will not be processed--no , or
,not_working); // ; or { after the paired " on line 1
// PBstring skipping code will stop on
// line 2 due to the ;
sprintf(test,"TEST" // no , after the paired " on line 1
"TEST1");
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 4.0 }
: OF INC'S AND EXC'S -- AND A DTE, TOO! :
PBstring and PBreplace use inclusion and exclusion files to determine whether
or not a particular file or string is a valid candidate for processing. If a
filename appears in the inclusion file as well as in the PBS-FILE.EXC
exclusion file, the exclusion file ALWAYS has precedence.
In the various *.EXC files, I have included information that I've found
*needs* to be in these files in order to get a working BBS.EXE file.
PBSTRING.INC, PBS-FILE.EXC, PBS-FUNC.EXC, PBS-CHAR.EXC, and PBS-STRG.EXC all
support the √ character. What does this mean? It means that if the first
character of any line in any of the files is a √, then that line is ignored,
it is not processed. To make a √, press and hold your ALT key, and type the
number 251 on your *NUMBER PAD*. It will make a √ -- if you use the top line
numbers, it will not.
So if you had this in PBSTRING.INC:
ADDRESS.C
√BATCH.C
BBS.C
Then ADDRESS.C and BBS.C would be processed, and BATCH.C would not.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 4.1 }
: INCLUSION FILE :
PBstring determines which C files to process by reading from a listing of C
files that is the inclusion file. By default, the inclusion file name to be
read is PBSTRING.INC, but this can be changed by using the /A{fn} switch.
[Of course, if the /A! or the /F{fn} switches are used, the inclusion file is
ignored.]
This file can be created by using the /B (/B{fn} if you want to build
something other than PBSTRING.INC). This uses PBS-FILE.EXC (if it exists --
see section 4.2.1) to "filter out" unwanted file names. File names that do
NOT appear in the PBS-FILE.EXC file will be added to the inclusion file.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 4.2 }
: GENERAL EXCLUSION FILE NOTES :
Exclusion files are those files that cause things NOT to happen. If a
filename appears in PBS-FILE.EXC, then it will not be processed. If a string
appears in PBS-STRG.EXC (and a partial for PBS-CHAR.EXC) or a function name
appears in PBS-FUNC.EXC, then the current line under consideration from the C
file being processed will be skipped.
All of these files are files that you can, and should, actively edit. They
can be changed using a standard text editor.
One more exclusion file, PBSTRING.DTE, should not be edited. More on that in
section 4.2.0.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 4.2.0 }
: PBSTRING.DTE :
PBSTRING.DTE is the file that tracks WHEN your C source files have been
modified. It is automatically re-created after each time you successfully
run PBstring with no errors. If there have been changes to the STR file
you've defined, and the program exits with no errors.
This way, you can always run PBstring in "all" (default) mode, and only those
files that you've updated since last running PBstring will be considered for
processing. This saves considerable amount of time since it keeps PBstring
from looking at all files every time!
Although it is a standard ASCII text file, it should not be edited. The
length and positioning of the fields in the file is critical for its proper
operation. Any changes to this file will most likely cause it to process all
files (and create a new PBSTRING.DTE file), thereby wasting your time.
If you want to re-initialize this file, to keep it from processing ANY
changes that you may have made to your source code, simply use the /D command
line switch.
If you want to process all your source files listed in the INC file, then use
the /AA switch on the command line.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 4.2.1 }
: PBS-FILE.EXC :
PBS-FILE.EXC is the file where you list the filenames of the files you do
*NOT* want processed. This file takes precedence over the inclusion file.
This means that if a filename appears in this file, and in the inclusion
file, then it will not be processed. This is to ensure safety of your
source.
To start, the file you get in the PBstring archive has 19 filenames. These
are the files from virgin (unmodified) WWIV source that are either (1) not
compiled with the WWIV source to make BBS.EXE, or (2) had no
get_stringx(x,y); statements in them. They are (in case you need to remake
the file):
BBS.C, BBSUTL.C, COM.C, CONVERT.C, EXTRN.C, FIX.C, MINIESM.C, MODEM.C,
RETURN.C, RIPOVL.C, RIPSPEED.C, SHARE.C, SKELETON.C, STRINGS.C, STRIP.C
SUBACC.C, SUBXTR.C, VERSION.C, XINIT.C
You made add/delete as you see fit. Keep in mind that removing certain files
from this list (say, MODEM.C) may cause WWIV to work incorrectly.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 4.2.2 }
: PBS-FUNC.EXC :
This file lists those function that normally SHOULDN'T have get_stringx(x,y);
statements in them. Most notably existprint(), printfile(), and onek() come
to mind (for WWIV source code). The comparisons *are* case sensitive.
NoAbort() is not treated the same as noabort()
To use this file, just place, one per line (case does not matter here) the
name of the function without the parenthesis. In the source code, the
function call should look like on of the following:
onek("ABCDE");
onek ("ABCDE");
The opening parenthesis should immediately follow, or be one space, after
the function call. If it is not, it will most likely be processed as normal.
Default function "names" that come with this program are:
printfile, existprint, noabort, onek, print_local_file, getenv, setmenu
execlp, get_string, get_stringx, _chmod, comstr, random_screen,
set_strings_fn, sizeof, rip_show, todownload, current_menu, exist, strtok
sscanf
Some other functions, namely from Asylum's ACHAT, are now included, and they
are:
ini_read_boolean, ini_read_number, ini_read_string, auto_mail
For FMD's WFC mod, I've added:
ini_get
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 4.2.3 }
: PBS-CHAR.EXC :
This file is for PARTIAL string comparisons. It *is* case sensitive as well.
Here you list, one per line, the partial string that, if they exist in the
line under current consideration by the program, will cause them to be
skipped over.
In STR_MOD, it was customary to include partial popular onek() command
strings such as, QABC. (This was because the function exclusion file doesn't
work.) In this case the following lines would *NOT* be processed:
onek("QABCDEF");
printf("This is a QABCDKLKJLK example."
These lines *WOULD* be processed:
printf("This is a qABCDKLKJLK example." // lower case q makes it different
onek("QAB"); // doesn't match QABC
Now, since the PBS-FUNC.EXC file does work, partial onek() command strings
need not be specified (as long as you have onek listed in the PBS-FUNC.EXC
file, that is).
Note that this needs to be used with some care. Although this is a cautious
program (and you may be keeping lines FROM being processed), over use of this
file can cause unnecessary amounts of text to remain in the program. This
would not be a good thing for your DGROUP.
NOTE NOTE NOTE: Certain partial strings are defaulted to in the program, and
should not be entered in this file. These partial strings are:
\"
\x
\n!
|
char * (with a = also on the same line)
!|
%"
1|
""
\\
\033
_on_[]
_off_[]
[ASCII 27 - ESCAPE (sometimes seen as a small left pointing arrow.)]
The list of PBS-CHAR.EXC entries in archive file are (this is kind of long, and
keep in mind that they're separated by commas and that punctuation [besides
the commas] and imbedded blanks in the second one are intentional):
!-@, ., .$$, .$$$, .ADD, .ANS, .B&W, .BAK, .BAT, .bat, .BBS, .brd
.CDR, .CFG, .CHT, .CNF, .COM, .com, .DAT, .DIR, .dsc, .DSC, .ed, .EXE, .exe
.EXT, .FRM, .GFL, .H, .ind, .IND, .inf, .INI, .ION, .LCL, .LOG, .LST, .MML
.mn, .MN, .MNU, .MOD, .MSG, .NDX, .NET, .NMM, .NUF, .PUB, .PW, .QWK, .QSC
.REG, .REP, .rip, .RIP, .RLZ, .RPT, .sav, .SDF, .SDI, .SUB, .sub, .STR, .SYS
.tag, .txt, .TXT, .UPD, .USR, .WWV, .XXX, .ZIP, .ZZZ, %sADDRESS, %sMSG
AUTOMSG., BBSLIST., EDITOR., GAMB-WL, NETWORK, NMMAIL%, PACKTMP$, POSTS.
RESTORE., STAT., SUBS., TEMP., TEMPCHAT., TMSG, WELCOME., get_string
get_stringx
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 4.2.4 }
: PBS-STRG.EXC :
This program is like the previous, except in that it looks for COMPLETE string
comparisons. It, too, is case sensitive.
Therefore, if a line in this file reads: This is a PARTY!
then this line would *NOT* be processed:
printf("This is a PARTY!");
and this one WOULD be processed:
printf("This is a party!"); // lower case party
If you find that you're adding a lot of lines like this to the file:
This is a PARTY!
Lets have a PARTY!
PARTY on, DUDE!
the you may wish to use the PBS-CHAR.EXC file instead. You can put PARTY in
that file, and cover all three of these lines (and possibly more) with the
one line in the other exclusion file.
This technique makes PBstring run considerably faster. In the last example,
for instance, PBstring would only have to search one line in PBS-CHAR.EXC
versus 3 lines (or more) in PBS-STRG.EXC.
Default strings are (^ represents a heart symbol):
*.*
%sFILE_ID.DIZ
EMAIL
< %s %s %s - %u %s >
``%s``
%s%s@%u.%s\r\n
%s#%u@%u.%s\r\n
^1T ^0- ^1%s\r\n
^7[^1%s%s^7] [^1%s^7]^0 : ^2
T - %s\r\n
[%s%s] [%s] :
^7(^1Conf %c^7)^0-^7(^1%s^7)
^7(^1%s%s^7)^0-^7(^1%s^7)^0 : ^2
(%s%s)-(%s) :
%s #%u @%u
%s %u @%u (%s)
Additionally, I've added this for my ADDRESS.C modification:
Users Handle or Name Network Address [%s]
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 4.2.5 }
: HOW TO EMULATE STR_MOD WITH THIS PROGRAM :
This is simple. To do an emulation of STR_MOD, simply place these two lines
in PBS-CHAR.EXC:
%
\
That's it. This will make PBstring act as STR_MOD without the bugs, and
limitations of the older program, and with all the speed of the newer.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 5.0 }
: MODIFYING WWIV SOURCE CODE TO ADD MORE STRING FILES :
All you need to do to activate a new STR file is to add one line to BBSUTL.C
Search on the following information (line 784 of virgin source):
set_strings_fn(2, languagedir, "YES.STR", 0);
set_strings_fn(3, languagedir, "NO.STR", 0);
strncpy(str_yes,get_string(1), sizeof(str_yes)-1);
strncpy(str_no,get_string(2), sizeof(str_no)-1);
Now, to add MODS.STR, with a string file number of 4, and a line like:
set_strings_fn(2, languagedir, "YES.STR", 0);
set_strings_fn(3, languagedir, "NO.STR", 0);
set_strings_fn(4, languagedir, "MODS.STR",0); // added this line <<<<<<<
strncpy(str_yes,get_string(1), sizeof(str_yes)-1);
strncpy(str_no,get_string(2), sizeof(str_no)-1);
You can, if you wish, change languagedir to point to ANY valid directory. So
to use C:\FOO\BAR, you'd make the line look like:
set_strings_fn(4, "C:\\FOO\\BAR", "MODS.STR",0);
You can use string file numbers up to 7 by default. (PBstring supports up to
19.) To add more, find this line in STRINGS.C and increase it:
#define MAX_STRFILES 8
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 6.0 }
: ALL ABOUT PBREPLACE (PBREPL.EXE) :
PBreplace basically allows you to replace the get_string() / get_stringx()
statements with the appropriate literal text strings from the string file
(STR) that the get_string[x]() statement points to. There are, however, many
different ways that this can be used.
PBreplace will take strings out of BBS.STR, SYSOPLOG.STR, NO.STR, and YES.STR
(if you're using WWIV) as well as any others that you may have specified for
use in your program. Option (C) from the selection screen, or the * command
while in the PBconfig program lets you specify string file filenames.
The original C files are backed up before processing takes place on them.
They retain the same filename with a new RPL extension (just like the ORG
extension that the extraction processing uses). So a processed C file called
LILO.C will have an original counterpart call LILO.RPL. You can easily
restore all C files by issuing a:
COPY *.RPL *.C
at the DOS prompt.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 6.1 }
: PBREPLACE COMMAND LINE SWITCHES :
──────────────────────────────────────────────────────────────────────────────
[what to call this switch] {example}
/s{filename} description
description
example, if any
──────────────────────────────────────────────────────────────────────────────
[? Help] {/?}
/? Bring up the online help.
──────────────────────────────────────────────────────────────────────────────
[All files!] {/A!}
/A! Process ALL the C files in the current directory.
──────────────────────────────────────────────────────────────────────────────
[Configuration editor] {/C}
/C Run the PBconfig editor.
──────────────────────────────────────────────────────────────────────────────
[DEBUG information] {/DEBUG}
/DEBUG Turns on DEBUG information in the PBSTRING.LOG file. Takes the
place of having to have a DEBUG.XXX file in existence in the
current working directory.
──────────────────────────────────────────────────────────────────────────────
[do this File] {/FBBS.C}
/F{fn} Process only the file specified in {fn}. Will check against
PBS-FILE.EXC to make certain if its okay to work on.
──────────────────────────────────────────────────────────────────────────────
[toggle Log file writes] {/L}
/L Turn PBSTRING.LOG entries on/off in accordance with the
PBSTRING.INI settings.
──────────────────────────────────────────────────────────────────────────────
[Mode 0 processing] {/M0}
/M0 Replace all get_string / get_string(x) lines the program can
find.
──────────────────────────────────────────────────────────────────────────────
[Mode 1 processing] {/M1NETWORK}
/M1{string} Replace those strings where the {string} is found in the STR
file for the string number specified. Using this switch will
not allow for multi-word strings. Use Option B from the
internal selection screen to achieve that.
──────────────────────────────────────────────────────────────────────────────
[Mode 2 processing] {/M2%}
/M2{char} Similar to /M2{string} except that this looks for a single,
specific character.
──────────────────────────────────────────────────────────────────────────────
[Mode 3 processing] {/M30}
/M3{#} This will allow strings to be replaced only if the string file
number being specified in the get_string() or get_stringx() is
the same as {#}.
──────────────────────────────────────────────────────────────────────────────
[Print reg. form] {/P}
/P Cause PBSTRING.REG to be created. PBCONFIG.EXE is required for
this.
──────────────────────────────────────────────────────────────────────────────
[Quiet mode] {/Q}
/Q Turn off/on most screen updating while processing. This makes
the program *MUCH* faster when off! Pressing F while processing
toggle this on/off.
──────────────────────────────────────────────────────────────────────────────
[Quiet mode - Sound] {/QS}
/QS Toggle on/off most sounds (in accordance with INI)
──────────────────────────────────────────────────────────────────────────────
[Work disk] {/WG:}
/W{disk} This causes PBreplace to use the {disk} as the place to create
the new C files. A perfect candidate for this is a RAM drive.
PBreplace keeps track of the total space left on the work disk.
The total is displayed in green until it drops below 81k (the
size of LISTPLUS.C -- most likely the largest C file you'll
process) when it'll then display in flashing red. If the total
drops below 25k (the average size of a C file), the program
stops processing.
──────────────────────────────────────────────────────────────────────────────
[Yes/no option] {/Y}
/Y This will make PBstring stop on all strings that have passed the
programs testing parameters and ask you if you want to remove it
to the string file. You can press Y or ENTER for yes, N for No,
or A to make it accept all the rest of the strings.
──────────────────────────────────────────────────────────────────────────────
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 6.2 }
: THE INTERNAL SELECTION SCREEN :
After execution PBREPL.EXE, you'll be show a screen that will allow you to
(re)select the operating options of PBreplace. It looks like:
╓────────────────────────────────────────────────────────────────────────────╖
║ ║
╟────────────────────────────────────────────────────────────────────────────╢
║ [A] Operational Mode : ║
║ [B] Secondary operational mode: ║
║ [C] Configure STR locations ║
║ [Q] Begin processing, also: ENTER ║
║ [*] Abort processing, also: ESC ║
╟────────────────────────────────────────────────────────────────────────────╢
║ ║
║ ║
╙────────────────────────────────────────────────────────────────────────────╜
While options Q (ENTER) and * (ESC) are obvious, explanations are needed for
the others.
OPTION A: Operational Mode - This lets you select from three choices that
control which FILES will be processed:
[A] all C files that exist in the current directory (/A!)
[F] a single file (/F{fn})
[I] all C files that are listed in the inclusion (INC) file
OPTION B: Secondary Operational Mode - Here you have control over which
STRINGS will be replaced:
[A] every get_string() and get_stringx() the program finds (/M0)
[C] all strings in the string file that have the specified character in it
(/M1{string})
[N] all strings in the specified string file number (/M2{char})
[S] all strings in the string file with the specified {partial} string in
it (/M3{#})
*NOTE*: The [C] and [S] options are case sensitive!
OPTION C: This is the editor (also available via PBSTRING /SE, PBCONFIG /S,
or the * command while in the main configuration editor) that
allows you to tell PBstring WHAT the names of all your string files
that you're using in your source code. When adding the filenames,
*DO NOT* add any path information. The .STR extension is optional.
See SECTION 7.2 for a complete description of the string file file-
name editor.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 6.3 }
: MISCELLANY ABOUT PBREPLACE :
While PBreplace is executing, you can press the F key to turn off screen
updating at any time (thereby speeding up the program), or any other key to
abort the processing (it will only stop between files).
You'll be notified of what C file is being processed, what STR file (and
string number) is being used, how many strings have been replaced in that
file (as well as totals) and how many "orphaned" strings are found.
Orphaned strings are those strings that point to (1) string files that do not
physically exist as have been specified in the editor, or (2) those
get_string[x]() statements where the string number is greater than the total
number of strings in the string file it points to.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 7.0 }
: EVERYTHING YOU WANTED TO KNOW ABOUT PBCONFIG.EXE... :
PBconfig is the new (as of PBstring version 1.2) stand-alone configuration
editor. I did this to save memory, and to actually make things easier.
PBconfig makes and/or edits the PBSTRING.INI file.
The use of this program is quite simple. Just answer the questions it asks
when you select an item. If you choose option *, you'll enter the string
locator editor. This editor is covered at the end of Section 6.0.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 7.1 }
: PBCONFIG COMMAND LINE SWITCHES :
PBconfig has few command line switch, which are:
──────────────────────────────────────────────────────────────────────────────
[what to call this switch] {example}
/s{filename} description
description
example, if any
──────────────────────────────────────────────────────────────────────────────
[? Help] {/?}
/? Bring up the online help.
──────────────────────────────────────────────────────────────────────────────
[DEBUG information] {/DEBUG}
/DEBUG Turns on DEBUG information in the PBSTRING.LOG file. Takes the
place of having to have a DEBUG.XXX file in existence in the
current working directory.
──────────────────────────────────────────────────────────────────────────────
[toggle Log entries] {/L}
/L Toggle writing to the PBSTRING.LOG file. This does take into
consideration the PBSTRING.INI settings.
──────────────────────────────────────────────────────────────────────────────
[Must save] {/M}
/M Force PBconfig into saving configuration information, even if
the (2 - Abort) option is selected.
──────────────────────────────────────────────────────────────────────────────
[Print reg. form] {/P}
/P Cause PBconfig to re-create a new PBSTRING.REG file.
──────────────────────────────────────────────────────────────────────────────
[specify String files] {/S}
/S Enter directly into the string file filename editor.
(Q)uitting after using this switch exits the program.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 7.2 }
: STRING FILE FILENAME EDITOR :
While the information on this editor is fairly straightforward, there are
some things that may need to be clarified. This is the screen-shot of the
editor:
╔════════════════════════════════════════════════════════════════════════════╗
║Please define the strings file(s) that you use in your program's source code║
╠════════════════════════════════════════════════════════════════════════════╣
║ [0] C:\WWIV\GFILES\BBS.STR ║
║ [1] C:\WWIV\GFILES\SYSOPLOG.STR ║
║ [2] C:\WWIV\GFILES\NO.STR ║
║ [3] C:\WWIV\GFILES\YES.STR ║
║ [4] C:\WWIV\GFILES\MODS.STR ║
║ [5] C:\WWIV\GFILES\TAG.STR ║
║ [6] C:\WWIV\GFILES\TRIVIA.STR ║
║ [7] C:\WWIV\GFILES\RANSTR.STR ║
║ [8] .THIS ENTRY HAS NOT BEEN SPECIFIED. ║
║ [9] .THIS ENTRY HAS NOT BEEN SPECIFIED. ║
║ [A] .THIS ENTRY HAS NOT BEEN SPECIFIED. ║
║ [B] .THIS ENTRY HAS NOT BEEN SPECIFIED. ║
║ [C] .THIS ENTRY HAS NOT BEEN SPECIFIED. ║
║ [D] C:\CPP\TEST.DAT ║
║ [Q] Quit back to main configuration screen ║
╠════════════════════════════════════════════════════════════════════════════╣
║ ║
╚════════════════════════════════════════════════════════════════════════════╝
*NOTE*: This screen allows to to specify up to the allowed 14 string files.
Options A-D refer to string file numbers 10-13.
IMPORTANT: You must have entry 0 filled in, even if it is with a bogus
filename.
Simply select the option you want (0-9,A-D,Q) and enter the file name. As
you see here, you *can* skip lines. If you enter a filename, with no path or
file extension, then the file is appended with .STR and the path information
[as you've defined on the main configuration screen] is added. So entering
simply BBS in this case would automatically generate C:\WWIV\GFILES\BBS.STR
If path information *is* entered, then no information whatsoever is added to
your entry. So C:\CPP\TEST would remain that way. In this manner you can
specify string files in various locations (and with file extension other than
STR, or none at all).
To clear an entry, select the option of the string you want to clear, then
press ESC, then ENTER. .THIS ENTRY HAS NOT BEEN SPECIFIED. will then be
displayed in the place of the string file definition.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 7.3 }
: AN IMPORTANT NOTE ABOUT PBSTRING.INI :
Since this INI file is getting larger, I highly recommend that you *DO NOT*
edit it by hand. That's what PBconfig is for, so please use it! :)
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 8.0 }
: LEGAL JUNQUE :
PBstring - Copyright (C) 1995-1996 - by Tracy L. Baker
STR_MOD - Copyright (C) 1994 - by Eric W. Joy
WWIV - Copyright (C) 1988-1996 - Wayne Bell
Qedit - Copyright (C) 1985-1996 - SemWare Corp.
STRPOP - Copyright (C) 1993 - Jon R. Rickher
ESM - Copyright (C) 1990-1993 - Jon R. Rickher
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 8.1 }
: COPYRIGHT :
The PBstring software and its accompanying documentation are protected by
both United States copyright law and international treaty provisions. You
may make copies of this program, and distribute those copies, provided that
you do not change any part of the PBS*.* archive, which include:
PBSTRING.EXE [The executable file.]
PBCONFIG.EXE [The configuration editor.]
PBREPL.EXE [The string replacement module.]
SETUP.EXE [Initial setup program.]
PBSTRING.DOC [This documentation file.]
PBSTRING.HIS [History of revisions file.]
PBSTRING.ANN [My version related announcement file.]
PBS-FILE.EXC [Exclusion file for files for stock WWIV 4.24.]
PBS-FUNC.EXC [Exclusion file for functions for stock WWIV 4.24.]
PBS-CHAR.EXC [Exclusion file, mainly for example, for partial strings.]
PBS-STRG.EXC [Exclusion file, mainly for example, for complete strings.]
FILE_ID.DIZ [BBS description file.]
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 8.2 }
: WARRANTY :
PBstring is provided as is, without warranty, either expressed or implied.
The author specifically disclaims all other warranties, expressed or implied,
including, but not limited to, any implied warranty of merchantability or
fitness for a particular purpose. You're using it, and I'm not responsible.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 8.3 }
: LICENSE AGREEMENT :
Users are granted a limited license to use the unregistered version of
PBstring for an evaluation period not to exceed thirty (30) days. Any other
use of PBstring, or use past the evaluation period requires registration.
Users may freely copy and distribute PBstring, provided that no fee is
charged, and that the PBstring archive contains unmodified copies of the
original files as produced by the author. No part of PBstring may be
modified, altered, reverse engineered, or sold without prior written
permission from the author.
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 8.4 }
: REGISTRATION :
Registration allows you to use PBstring past the 30 day trial period. It
also removes the random "press this key" delay during the program's startup.
Plus, it makes you feel better and encourages further development of this,
and other, software by the author. Registration is $20 (US currency only).
Fill out the form in PBSTRING.REG and send it, and the $20 check or money
order to the address in PBSTRING.REG. Finally, registering this program will
convince my wife that all the hours of development I've put in this project
really are worth it!
Send your registrations to:
Tracy L. Baker
114 Sea Bridge
Alameda, CA 94502
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-
{ SECTION 9.0 }
: THE HALL OF HONOR -- THOSE WHO ARE REGISTERED :
Hobbit The Miller Music BBS 607-898-3139
Spam Burger The Sniper BBS 319-277-2624
Dawg The Dawg House 314-940-1253
Infinity Hard Disk Café 612-753-9960
Swordfish FishTank 612-757-0218
Kirk StarFleet Command 904-448-1655
The Shadow Sysco BBS 806-797-3750
Morgul The Trading Post [SOUTH] 803-731-0690
Stainless Steel Rat The Final Frontier BBS 701-293-9197
Batman Arkham Asylum 619-747-0346
WhiteHeart The Highlands BBS 904-388-1445
Spotnick Digital Republic 418-698-7015
Lancer Asgardian Realm 314-291-6762
Sean Settle Warlock's Realm 919-937-0682
Hammer The Anvil BBS [ASV] 541-746-9479
Jiff Devcon BBS 719-646-3177
Akai Ryu Chaotic Artistry 703-486-2631
-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-<*>-